
const Koa = require('koa');
const https = require('http');
const httpsserver = require('https')
const sslify = require('koa-sslify').default

const path = require('path');
const KoaStatic = require('koa-static');
const views = require('koa-views');
const router = require('koa-router')();
const websockrou = require('koa-route')
const ejs = require('ejs');
const rou = require('./router/int');
const rou2 = require('./websockrouter/int');
const websockify = require('koa-websocket');
const bodyParser = require('koa-bodyparser');
const request = require('request');
const json = require('koa-json');
const logger = require('koa-logger')
var body = require('koa-body');
const ueditor = require('./lib/ueditor/index');
const ueditor1 = require('koa2-ueditor');
var fs = require('fs');
// 设置跨域
var cors = require('koa2-cors');
const jsonp = require('koa-jsonp');

// 创建一个Koa对象表示web app本身:
const app = websockify(new Koa());
app.use(body({ multipart: true }));
// app.use(jsonp())
app.use(cors());
app.context.win = require('./lib/getWin')();
app.context.db = require('./lib/query'); //请查看readme文件操作
app.context.upload = require('./lib/upload'); //上传文件
app.context.root = __dirname; //请查看readme文件操作
app.context.gethtml = require('./lib/gethtml'); //捉包
app.context.fs = fs; 

// var dbdata = app.context.db.query("(SELECT * FROM 5name ) UNION(SELECT * FROM 4name) ORDER BY time desc limit 1").then(function(res){
// 	console.log(res)
// })

app.context.res2 = request; //请查看readme文件操作
// app.use(json())
// app.use(logger())
app.use(bodyParser({
	enableTypes: ['json', 'form', 'text']
}));
var wxshowobj = {};
/* 实现简单的接发消息 */
app.ws.use((ctx, next) => {
	return next(ctx)
});
// 配置session
const Koa_Session = require('koa-session');
const session_signed_key = ["some secret hurr"]; // 这个是配合signed属性的签名key
const session_config = {
	key: 'koa:sess',
	/**  cookie的key。 (默认是 koa:sess) */
	maxAge: 4000,
	/**  session 过期时间，以毫秒ms为单位计算 。*/
	autoCommit: true,
	/** 自动提交到响应头。(默认是 true) */
	overwrite: true,
	/** 是否允许重写 。(默认是 true) */
	httpOnly: true,
	/** 是否设置HttpOnly，如果在Cookie中设置了"HttpOnly"属性，那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息，这样能有效的防止XSS攻击。  (默认 true) */
	signed: true,
	/** 是否签名。(默认是 true) */
	rolling: true,
	/** 是否每次响应时刷新Session的有效期。(默认是 false) */
	renew: false,
	/** 是否在Session快过期时刷新Session的有效期。(默认是 false) */
};
const session = Koa_Session(session_config, app)
app.keys = session_signed_key;
app.use(session);
// 静态文件处理


// 配置编辑器上传图片接口
router.all('/controller',
	ueditor('static')
	// ueditor1('static')
)
app.use(KoaStatic(path.join(__dirname, './static')));
// 模版引擎处理
app.use(views(__dirname + '/views', {
	// extension: 'ejs',
	map: {
		html: 'ejs'
	}
}));

// 自定义路由
rou(router);
// websockiet
rou2(app,wxshowobj); //websockiet路由

app.use(router.routes());
app.use(router.allowedMethods());
// 对于任何请求，app将调用该异步函数处理请求：
app.use(async (ctx, next) => {
	try {
		await next();
	} catch (err) {
		ctx.response.status = err.statusCode || err.status || 500;
		ctx.response.body = {
			message: err.message
		};
	}
});
app.use(async (ctx, next) => {
	var nowUrl = ctx.request.url.split('?')[0];
	if (nowUrl == '/') ctx.response.redirect('/index');
	await next();
});
// 在端口8848监听:
app.listen(8888);
const options = {
	// key: fs.readFileSync('./httpskey/*****.key'),
	// cert: fs.readFileSync('./httpskey/*****.pem'),
   }
//    app.use(sslify())  // 使用ssl
	
	
   // config.port为自定义端口
	
//    https.createServer(options, app.callback()).listen(8000, (err) => {
// 	 if (err) {
// 	   console.log('服务启动出错', err);
// 	 } else {
// 	   console.log('guessWord-server运行在' + 8888 + '端口');
// 	 }	
//    });
// console.log('app started at port 3000...');
